<?php
/**
 * ペイジャークラス<br />
 *
 * @package apamanshop
 * @author SS永田
 * @copyright コピーライト(要確認)
 */
class Rstobi_Model_Pager extends Apm_Model_Base
{
	// ページャ設定
	private	$pagerSetting = array(
						'pages'=> 6						// 最低何ページ分、リンクを表示するか
//						,'dispCount' => '20,40,60'		// 表示件数セレクトBOXの設定（カンマ区切りで複数指定可
//						,'defaltDispCount' => 20		// デフォルト値（一覧表示件数）

						// 2010/12/28 10件毎表示対応
						,'dispCount' => '10,20,30'		// 表示件数セレクトBOXの設定（カンマ区切りで複数指定可
						,'defaltDispCount' => 10		// デフォルト値（一覧表示件数）
						,'backPage' => 2				// 何ページ分、戻るリンクを表示するか
						,'movePage' => 3				// 何ページ分、進めるリンクを表示するか
						,'maxDispCount' => 0 );			// 最大何件目まで表示するか（0:無制限）

	/**
	/* 初期処理
	 */
	public function __construct($pagerSet = null) {

		if( ! is_null($pagerSet) ){
			// ページャ設定
			$this->pagerSetting = $pagerSet;
		}
	}

	/*
	 * ページャ設定を取得
	 * @access	private
	 * @return  array
	 */
	private function getPagerSetting()
	{
		return $this->pagerSetting;
	}

	/*
	 * ページャのデフォルト設定を取得
	 * @access	public
	 * @return  array
	 */
	public function getDefaultPager($pafe=1,$dispCnt = NULL)
	{
		$defaultPager = array();
		$defaultPager['page']      = $pafe;

		if(is_null($dispCnt))
		{
			$defaultPager['dispCount'] = $this->pagerSetting['defaltDispCount'];
		}
		else
		{
			$defaultPager['dispCount'] = $dispCnt;
		}

		return $defaultPager;
	}

	/*
	/* ページャ用データの作成
	/*
	/* @access public
	/* $param string $bukenCount 検索物件数
	/* $param string $pageCount 遷移先ページ番号
	/* $param string $maxDateCount 一覧表示件数
	/* $return array $pagerData ページャー用データ
	 */
	public function getPagerData($bukenCount, $pageCount, $maxDateCount)
	{
		// ページャ設定を取得
		$pagerData = $this->getPagerSetting();

		// 検索物件数が最大物件数を超えないようにする
		if($bukenCount > $pagerData['maxDispCount'] && $pagerData['maxDispCount'] <> 0)
		{
			$maxDispCount = $pagerData['maxDispCount'];
		}
		else
		{
			$maxDispCount = $bukenCount;
		}

		// 最大ページ数を計算
		$maxPage = ceil($maxDispCount / $maxDateCount);

		// 2011-08-17 INSERT_START 物件数以上のページに移動するバグへの対応 ss-sakakibara
		if($bukenCount < ($pageCount - 1) *  $maxDateCount + 1){
			$pageCount = 1;
		}
		// 2011-08-17 INSERT_END 物件数以上のページに移動するバグへの対応 ss-sakakibara

		// 最後のページを計算
		$endPage = $pageCount + $pagerData['movePage'];
		// 最後のページが最低ページ数より小さい場合
		if($endPage < $pagerData['pages'])
		{
			$endPage = $pagerData['pages'];
		}
		// 最後のページが最大ページ数より大きい場合
		if($endPage > $maxPage)
		{
			$endPage = $maxPage;
		}

		// 最初のページを計算
		$startPage = $pageCount - $pagerData['backPage'];

		// 最後のページから最終ページまでのリンクが設定数未満だった場合
		if($maxPage - $pageCount < $pagerData['movePage'])
		{
			$startPage = $startPage - ($pagerData['movePage'] - ($maxPage - $pageCount));
		}

		// 最初のページが1より小さい場合
		if($startPage < 1)
		{
			$startPage = 1;
		}

		// 表示物件数（何件目から）を計算
		$bukenCountFrom = ($pageCount * $maxDateCount) - $maxDateCount + 1;

		// 表示物件数（何件目まで）を計算
		$bukenCountTo = $pageCount * $maxDateCount;
		if($bukenCountTo > $maxDispCount)
		{
			$bukenCountTo = $maxDispCount;
		}

		$pagerData['nowPage']          = $pageCount;              // 現在のページ
		$pagerData['maxPage']          = $maxPage;                // 最大ページ数
		$pagerData['endPage']          = $endPage;                // 最後のページ
		$pagerData['startPage']        = $startPage;              // 最初のページ
		$pagerData['bukenCountAll']    = $bukenCount;             // 全体物件数
		$pagerData['bukenCountFrom']   = $bukenCountFrom;         // 表示物件数（何件目から）
		$pagerData['bukenCountTo']     = $bukenCountTo;           // 表示物件数（何件目まで）
		$pagerData['dispCountSetting'] =
		                    explode(",",$pagerData['dispCount']); // 表示件数セレクトBOXの設定
		$pagerData['dispCount']        = $maxDateCount;           // 一覧表示物件数

		$pagerData[pageArray] = array();                          // 表示するページ番号のFROM TOを詰める
		for($i=$startPage; $i<=$endPage; $i++)
		{
			$pagerData[pageArray][$i] = $i;
		}

		return $pagerData;
	}

	/*
	/* ページャ用データの作成
	/*
	/* @access public
	/* $param string $start 取得開始位置
	/* $param string $count 取得件数
	/* $return array
	 */
	public function getDataFromto($start, $count)
	{
		// ページャ設定を取得
		$pagerData = $this->getPagerSetting();

		// 取得件数が、PC版の最大取得可能件数を超えないようにする
		if(max(explode(",",$pagerData['dispCount'])) < $count)
		{
			$count = max(explode(",",$pagerData['dispCount']));
		}

		$pagerData = array();
		$pagerData['bukenCountFrom']   = $start;              // 表示物件数（何件目から）
		$pagerData['bukenCountTo']     = $start + $count - 1; // 表示物件数（何件目まで）

		return $pagerData;
	}
}
?>